var RedBorderEffect = GObject.registerClass(
class RedBorderEffect extends Clutter.Effect {
- vfunc_paint() {
+ vfunc_paint(paintContext) {
let actor = this.get_actor();
- actor.continue_paint();
+ actor.continue_paint(paintContext);
let color = new Cogl.Color();
color.init_from_4ub(0xff, 0, 0, 0xc4);
this._currentLabel.allocate(childBox, flags);
}
- vfunc_paint() {
- this._currentLabel.paint();
+ vfunc_paint(paintContext) {
+ this._currentLabel.paint(paintContext);
}
_updateUser() {
G_DEFINE_TYPE_WITH_PRIVATE (ShellGLSLEffect, shell_glsl_effect, CLUTTER_TYPE_OFFSCREEN_EFFECT);
static gboolean
-shell_glsl_effect_pre_paint (ClutterEffect *effect)
+shell_glsl_effect_pre_paint (ClutterEffect *effect,
+ ClutterPaintContext *paint_context)
{
ShellGLSLEffect *self = SHELL_GLSL_EFFECT (effect);
ClutterOffscreenEffect *offscreen_effect = CLUTTER_OFFSCREEN_EFFECT (effect);
}
parent_class = CLUTTER_EFFECT_CLASS (shell_glsl_effect_parent_class);
- success = parent_class->pre_paint (effect);
+ success = parent_class->pre_paint (effect, paint_context);
if (!success)
return FALSE;
}
static void
-shell_glsl_effect_paint_target (ClutterOffscreenEffect *effect)
+shell_glsl_effect_paint_target (ClutterOffscreenEffect *effect,
+ ClutterPaintContext *paint_context)
{
ShellGLSLEffect *self = SHELL_GLSL_EFFECT (effect);
ShellGLSLEffectPrivate *priv;
CLUTTER_TYPE_OFFSCREEN_EFFECT);
static gboolean
-shell_invert_lightness_effect_pre_paint (ClutterEffect *effect)
+shell_invert_lightness_effect_pre_paint (ClutterEffect *effect,
+ ClutterPaintContext *paint_context)
{
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
ClutterEffectClass *parent_class;
parent_class =
CLUTTER_EFFECT_CLASS (shell_invert_lightness_effect_parent_class);
- if (parent_class->pre_paint (effect))
+ if (parent_class->pre_paint (effect, paint_context))
{
ClutterOffscreenEffect *offscreen_effect =
CLUTTER_OFFSCREEN_EFFECT (effect);
}
static void
-shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect)
+shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect,
+ ClutterPaintContext *paint_context)
{
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
ClutterActor *actor;
* by clutter before glSwapBuffers() makes it visible to the user.
*/
static void
-recorder_on_stage_paint (ClutterActor *actor,
- ShellRecorder *recorder)
+recorder_on_stage_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context,
+ ShellRecorder *recorder)
{
if (recorder->state == RECORDER_STATE_RECORDING)
recorder_record_frame (recorder, FALSE);
G_DEFINE_TYPE_WITH_PRIVATE (ShellScreenshot, shell_screenshot, G_TYPE_OBJECT);
+static void
+grab_screenshot (ClutterActor *stage,
+ GTask *result);
+
static void
shell_screenshot_class_init (ShellScreenshotClass *screenshot_class)
{
g_free (data);
}
+static void
+on_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context,
+ GTask *result)
+{
+ grab_screenshot (actor, result);
+}
+
+static void
+on_actors_painted (ClutterActor *actor,
+ GTask *result)
+{
+ grab_screenshot (actor, result);
+}
+
static void
grab_screenshot (ClutterActor *stage,
GTask *result)
if (priv->include_cursor)
draw_cursor_image (priv->image, priv->screenshot_area);
- g_signal_handlers_disconnect_by_func (stage, grab_screenshot, result);
+ g_signal_handlers_disconnect_by_func (stage, on_paint, result);
+ g_signal_handlers_disconnect_by_func (stage, on_actors_painted, result);
task = g_task_new (screenshot, NULL, on_screenshot_written, result);
g_task_run_in_thread (task, write_screenshot_thread);
{
ClutterActor *stage;
ShellScreenshotPrivate *priv = screenshot->priv;
- const char *paint_signal;
+ gboolean use_paint_signal = FALSE;
GTask *result;
if (priv->stream != NULL) {
priv->include_cursor = FALSE;
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
- paint_signal = "actors-painted";
meta_disable_unredirect_for_display (shell_global_get_display (priv->global));
if (should_draw_cursor_image (SHELL_SCREENSHOT_SCREEN))
priv->include_cursor = TRUE;
else
- paint_signal = "paint";
+ use_paint_signal = TRUE;
}
- g_signal_connect_after (stage, paint_signal, G_CALLBACK (grab_screenshot), result);
+ if (use_paint_signal)
+ {
+ g_signal_connect_after (stage, "paint",
+ G_CALLBACK (on_paint),
+ result);
+ }
+ else
+ {
+ g_signal_connect_after (stage, "actors-painted",
+ G_CALLBACK (on_actors_painted),
+ result);
+ }
clutter_actor_queue_redraw (stage);
}
static void
-st_box_layout_paint (ClutterActor *actor)
+st_box_layout_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context)
{
StBoxLayout *self = ST_BOX_LAYOUT (actor);
StBoxLayoutPrivate *priv = self->priv;
cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
}
- st_widget_paint_background (ST_WIDGET (actor));
+ st_widget_paint_background (ST_WIDGET (actor), paint_context);
if (x != 0 || y != 0)
{
for (child = clutter_actor_get_first_child (actor);
child != NULL;
child = clutter_actor_get_next_sibling (child))
- clutter_actor_paint (child);
+ clutter_actor_paint (child, paint_context);
if (priv->hadjustment || priv->vadjustment)
cogl_framebuffer_pop_clip (fb);
}
static void
-st_box_layout_pick (ClutterActor *actor)
+st_box_layout_pick (ClutterActor *actor,
+ ClutterPickContext *pick_context)
{
StBoxLayout *self = ST_BOX_LAYOUT (actor);
StBoxLayoutPrivate *priv = self->priv;
cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
}
- CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->pick (actor);
+ CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->pick (actor, pick_context);
if (x != 0 || y != 0)
{
for (child = clutter_actor_get_first_child (actor);
child != NULL;
child = clutter_actor_get_next_sibling (child))
- clutter_actor_pick (child);
+ clutter_actor_pick (child, pick_context);
if (priv->hadjustment || priv->vadjustment)
cogl_framebuffer_pop_clip (fb);
}
static void
-st_entry_paint (ClutterActor *actor)
+st_entry_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context)
{
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
StShadow *shadow_spec = st_theme_node_get_text_shadow (theme_node);
ClutterActorClass *parent_class;
- st_widget_paint_background (ST_WIDGET (actor));
+ st_widget_paint_background (ST_WIDGET (actor), paint_context);
if (shadow_spec)
{
* This is needed as we still want to paint children.
*/
parent_class = g_type_class_peek_parent (st_entry_parent_class);
- parent_class->paint (actor);
+ parent_class->paint (actor, paint_context);
}
static void
}
static void
-st_icon_paint (ClutterActor *actor)
+st_icon_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context)
{
StIcon *icon = ST_ICON (actor);
StIconPrivate *priv = icon->priv;
- st_widget_paint_background (ST_WIDGET (actor));
+ st_widget_paint_background (ST_WIDGET (actor), paint_context);
if (priv->icon_texture)
{
clutter_actor_get_paint_opacity (priv->icon_texture));
}
- clutter_actor_paint (priv->icon_texture);
+ clutter_actor_paint (priv->icon_texture, paint_context);
}
}
}
static void
-st_label_paint (ClutterActor *actor)
+st_label_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context)
{
StLabelPrivate *priv = ST_LABEL (actor)->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
StShadow *shadow_spec = st_theme_node_get_text_shadow (theme_node);
- st_widget_paint_background (ST_WIDGET (actor));
+ st_widget_paint_background (ST_WIDGET (actor), paint_context);
if (shadow_spec)
{
}
}
- clutter_actor_paint (priv->label);
+ clutter_actor_paint (priv->label, paint_context);
}
static void
CoglPipeline *shadow_pipeline = NULL;
float resource_scale;
float width, height;
+ ClutterPaintContext *paint_context;
g_return_val_if_fail (clutter_actor_has_allocation (actor), NULL);
cogl_framebuffer_scale (fb, resource_scale, resource_scale, 1);
clutter_actor_set_opacity_override (actor, 255);
- clutter_actor_paint (actor);
- clutter_actor_set_opacity_override (actor, -1);
+
+ paint_context = clutter_paint_context_new_for_framebuffer (fb);
+ clutter_actor_paint (actor, paint_context);
+ clutter_paint_context_destroy (paint_context);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
cogl_pop_framebuffer ();
G_GNUC_END_IGNORE_DEPRECATIONS;
+ clutter_actor_set_opacity_override (actor, -1);
+
cogl_object_unref (fb);
shadow_pipeline = _st_create_shadow_pipeline (shadow_spec, buffer,
static void
-st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
+st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect,
+ ClutterPaintContext *paint_context)
{
StScrollViewFade *self = ST_SCROLL_VIEW_FADE (effect);
ClutterShaderEffect *shader = CLUTTER_SHADER_EFFECT (effect);
clutter_shader_effect_set_uniform (shader, "fade_area_bottomright", CLUTTER_TYPE_SHADER_FLOAT, 2, fade_area_bottomright);
parent = CLUTTER_OFFSCREEN_EFFECT_CLASS (st_scroll_view_fade_parent_class);
- parent->paint_target(effect);
+ parent->paint_target (effect, paint_context);
}
static void
}
static void
-st_scroll_view_paint (ClutterActor *actor)
+st_scroll_view_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context)
{
StScrollViewPrivate *priv = ST_SCROLL_VIEW (actor)->priv;
- st_widget_paint_background (ST_WIDGET (actor));
+ st_widget_paint_background (ST_WIDGET (actor), paint_context);
if (priv->child)
- clutter_actor_paint (priv->child);
+ clutter_actor_paint (priv->child, paint_context);
if (priv->hscrollbar_visible)
- clutter_actor_paint (priv->hscroll);
+ clutter_actor_paint (priv->hscroll, paint_context);
if (priv->vscrollbar_visible)
- clutter_actor_paint (priv->vscroll);
+ clutter_actor_paint (priv->vscroll, paint_context);
}
static void
-st_scroll_view_pick (ClutterActor *actor)
+st_scroll_view_pick (ClutterActor *actor,
+ ClutterPickContext *pick_context)
{
StScrollViewPrivate *priv = ST_SCROLL_VIEW (actor)->priv;
/* Chain up so we get a bounding box pained (if we are reactive) */
- CLUTTER_ACTOR_CLASS (st_scroll_view_parent_class)->pick (actor);
+ CLUTTER_ACTOR_CLASS (st_scroll_view_parent_class)->pick (actor, pick_context);
if (priv->child)
- clutter_actor_pick (priv->child);
+ clutter_actor_pick (priv->child, pick_context);
if (priv->hscrollbar_visible)
- clutter_actor_pick (priv->hscroll);
+ clutter_actor_pick (priv->hscroll, pick_context);
if (priv->vscrollbar_visible)
- clutter_actor_pick (priv->vscroll);
+ clutter_actor_pick (priv->vscroll, pick_context);
}
static gboolean
* painting children.
*/
void
-st_widget_paint_background (StWidget *widget)
+st_widget_paint_background (StWidget *widget,
+ ClutterPaintContext *paint_context)
{
StWidgetPrivate *priv = st_widget_get_instance_private (widget);
CoglFramebuffer *framebuffer;
}
static void
-st_widget_paint (ClutterActor *actor)
+st_widget_paint (ClutterActor *actor,
+ ClutterPaintContext *paint_context)
{
- st_widget_paint_background (ST_WIDGET (actor));
+ st_widget_paint_background (ST_WIDGET (actor), paint_context);
/* Chain up so we paint children. */
- CLUTTER_ACTOR_CLASS (st_widget_parent_class)->paint (actor);
+ CLUTTER_ACTOR_CLASS (st_widget_parent_class)->paint (actor, paint_context);
}
static void
StThemeNode * st_widget_peek_theme_node (StWidget *widget);
GList * st_widget_get_focus_chain (StWidget *widget);
-void st_widget_paint_background (StWidget *widget);
+void st_widget_paint_background (StWidget *widget,
+ ClutterPaintContext *paint_context);
gboolean st_widget_get_resource_scale (StWidget *widget,
float *resource_scale);